package com.yuw.dz.innerClass;


public class Student {

    // 属性  成员变量

    // 学生姓名
    private String stuName; // 成员变量
    // 学生年龄
    private int stuAge;
    // 学号
    private String stuNo;
    // 学校
    private String stuSchool;

    // 成员变量的位置
    public class GameGroup {
        // 成员变量

        // 成员方法
        public void playGame() {
            System.out.println(stuName + " is playing game...");
        }
    }

    // 行为


    public void doEating(String foodName) {
        System.out.println("执行了子类的重写的方法");
        //super.doEating(foodName); // 使用super调用父类的被覆盖的同名的方法
        // 使用成员内部类
        // 创建成员内部类的实例变量
        GameGroup gg = new GameGroup();
        gg.playGame();


    }

    /**
     * 学习行为
     */
    public void doStuding() {

        // 局部变量
        int i = 1;
        //i =2;
        // 局部内部类
         class EnglishGroup {
            // 成员变量

            // 成员方法
            public void playGame() {
                System.out.println(stuName + " is playing game...");
            }
        }

        System.out.println(stuName + " is studing...");

         // 局部内部类的使用

        // 创建成员内部类的实例变量
        EnglishGroup eg = new EnglishGroup();
        eg.playGame();
    }

    /**
     * 游戏行为
     */
    public void palyGaming() {

        // 局部变量
        // 创建抽象类的子类的实例对象并调用其行为
        GameTeamImpl gti = new GameTeamImpl();
        // 使用实例变量调用行为方法
        gti.playGameWithTeam();
        // new GameTeamImpl() 就是一个匿名变量，没有声明变量名的变量就是匿名变量
        new GameTeamImpl().playGameWithTeam();
        // 匿名内部类--调用匿名内部类的行为
        new GameTeam(){
            // 现场实现抽象类中没有实现的方法
            // 此处一般是业务逻辑实现的地方
            @Override
            public void playGameWithTeam() {
                System.out.println("play game with team.......");
            }
        }.playGameWithTeam();


        System.out.println(stuName + " is studing...");

        // 局部内部类的使用


    }

    public String getStuName() {
        return stuName;
    }

    public void setStuName(String stuName) {
        this.stuName = stuName;
    }

    public int getStuAge() {
        return stuAge;
    }

    public void setStuAge(int stuAge) {
        this.stuAge = stuAge;
    }

    public String getStuNo() {
        return stuNo;
    }

    public void setStuNo(String stuNo) {
        this.stuNo = stuNo;
    }

    public String getStuSchool() {
        return stuSchool;
    }

    public void setStuSchool(String stuSchool) {
        this.stuSchool = stuSchool;
    }
}
